package org.grottarossa.template.data.pojo.table;


import java.util.ArrayList;

import org.grottarossa.template.data.pojo.utils.Container;

/**
 *
 * La Classe rappresenta l'oggetto table.
 *
 * @author Marco Sabatini (sabatini.m@gmail.com)
 * @author Maurizio Farina (maurizio.farina@gmail.com)
 * @author Marco Trischitta (marco.trischitta@gmail.com)
 * @version %I%, %G%
 * @since 1.0
 *
 * */
public class Table extends Container
{
	/**E' l'header della table.*/
	private Header header;
	/**Sono i record della table.*/
	private ArrayList<Record> records;

	public Table clone()
	{
		Table clone = new Table();

		for(Cell c : header.getHeaderCells())
		{
			clone.getHeader().add(c);
		}

		for(Record r : records)
		{
			clone.getRecords().add(r);
		}

		return clone;
	}

	/**
	 * Il costruttore della table inizializza l'header e i record della table.
	 * */
	public Table()
	{
		header = new Header();
		records = new ArrayList<Record>();
	}

	/**
	 * La funzione aggiunge un record alla table.
	 * */
	public void add(Record record)
	{
		records.add(record);
	}

	/**
	 * La funzione recupera i record della tabella.
	 * */
	public ArrayList<Record> getRecords()
	{
		return records;
	}

	/**
	 * La funzione recupera l'header della tabella.
	 * */
	public Header getHeader()
	{
		return header;
	}

	/**
	 * La funzione verifica se la tabella contiene record o meno.
	 * */
	public boolean isEmpty()
	{
		return ( records.size() == 0 ? true : false);
	}

	/**
	 * La funzione verifica se la tabella non contiene record o meno.
	 * */
	public boolean isNotEmpty()
	{
		return ( records.size() == 0 ? false : true);
	}

	/**
	 * La funzione recupera gli header di ogni colonna.
	 * @return Un array di stringhe che rappresenta gli header della colonna.
	 * */
	public String[] getColumnHeaders()
	{
		String[] columns = new String[header.getHeaderSize()];
		int i=0;

		for ( Cell cell : header.getHeaderCells())
		{
			if ( !(cell.isAddByEngine()) )
				columns[i++] = cell.getFieldDisplayName();
		}

		return columns;
	}

	/**
	 * La funzione recupera le colonne visibili.
	 * @return Un array di stringhe che rappresenta le colonne della tabella che sono visibili.
	 * */
	public String[] getVisibleColumns()
	{
		String[] columns = new String[header.getHeaderSize()];
		int i=0;

		for ( Cell cell : header.getHeaderCells())
		{
			if ( !(cell.isAddByEngine()) )
			{
				String val = (cell.getValue() != null) ? cell.getValue().toString() : null;
				columns[i++] = val;
			}
		}

		return columns;
	}
}